#ifndef GLOBAL_H
#define GLOBAL_H

/******************************************************************************
 *
 * @file       global.h
 * @brief      全局的一个头文件，类似于util工具类的感觉
 *
 * @author     ax
 * @date       2024/05/10
 * @history
 *****************************************************************************/

#include <QWidget>
#include <functional>
#include "QStyle"

extern std::function<void(QWidget*)> repolish; // 函数指针

extern std::function<QString(QString)> xorString; // 密码加密传输

enum ReqId{
    ID_GET_VARIFY_CODE = 1001, // 获取验证码   HttpMgr ---> GateServer ---> VerifyServer
    ID_REG_USER = 1002, // 注册用户    // HttpMgr ---> GateServer
    ID_RESET_PWD = 1003, // 重置密码   // HttpMgr ---> GateServer
    ID_USER_LOGIN = 1004, // 登陆      // HttpMgr ---> GateServer ---> StatusServer ---> ChatServer
    ID_CHAT_LOGIN = 1005, // 建立长连接的聊天  TcpMgr ---> ChatServer
    ID_CHAT_LOGIN_RSP = 1006, // 客户端处理登陆回包
};

enum ErrorCodes{
    SUCCESS = 0,
    ERR_JSON = 1001, // json解析失败
    ERR_NETWORK = 1002,
    VarifyExpired = 1003, // 验证码已过期
    PasswdErr = 1004, // 密码和确认密码不匹配
    UserExist = 1005, // name或者email已经存在
    VarifyError = 1006, // 验证码错误
    EmailNotMatch = 1007, // user 和 email 不匹配
    PasswdUpdateFail = 1008, // 重置密码更新失败
    PasswdInvalid = 1009, // 用户名和密码不匹配
    RPCGetFailed = 1010, // StatusGrpcClient获取chat server 失败
    TokenInvalid = 1011,   //Token失效
    UidInvalid = 1012,  //uid无效
};

enum Modules{
    REGISTERMOD = 0, // 注册界面
    RESETMOD = 1,    // 重置界面
    LOGINMOD = 2,    // 登陆界面
};

// ui->err_tip 错误提示框的错误级别
enum TipErr{
    TIP_SUCCESS = 0,
    TIP_EMAIL_ERR = 1,
    TIP_PWD_ERR = 2,
    TIP_CONFIRM_ERR = 3,
    TIP_PWD_CONFIRM = 4,
    TIP_VARIFY_ERR = 5,
    TIP_USER_ERR = 6,
};

// registerDialog界面的密码是否显示
enum ClickLbState{
    Normal = 0,
    Selected = 1,
};

// ChatSreverInfo
struct ServerInfo{
    QString Host;
    QString Port;
    QString Token;
    int uid;
};

// qt client 和 ChatServer 通信是使用的
enum MSG_IDS {
    MSG_CHAT_LOGIN = 1005, // 用户登陆
    MSG_CHAT_LOGIN_RSP = 1006, // 用户登陆回包
};

extern QString gate_url_prefix; // GateServer 的前缀

// 聊天界面几种模式（ChatDialog  chat_user_wid 就显示对应的 list）
enum ChatUIMode{
    SearchMode, // 搜索模式
    ChatMode, // 聊天模式
    ContactMode, // 联系模式
};

// 自定义QListWidgetItem的几种类型
enum ListItemType{
    CHAT_USER_ITEM, // 聊天用户
    CONTACT_USER_ITEM, // 联系人用户
    SEARCH_USER_ITEM, // 搜索到的用户
    ADD_USER_TIP_ITEM, // 提示添加用户
    INVALID_ITEM,  // 不可点击条目
    GROUP_TIP_ITEM, // 分组提示条目
};





#endif // GLOBAL_H
